<?php
declare (strict_types = 1);

namespace app\home\controller;

use app\home\business\UserBusiness;
use think\exception\HttpException;
use think\facade\Cache;
use think\facade\Session;
use think\facade\View;
use think\Request;

//创建控制器的时候、加一个--plain 没有的默认资源方法

class Login
{
    /**
     * 登录页面
     * @return string
     */
    public function login(){
        // 临时关闭模版布局
        View::config(['layout_on' => false]);
        return View::fetch();
    }

    /**
     * 注册页面
     */
    public function register(){
        // 临时关闭模版布局
        View::config(['layout_on' => false]);
        return View::fetch();
    }

    /**
     * 发送验证码的逻辑
     * 用户输入手机号
     * 点击发送验证码（前端需要：一、验证手机号个格式、二、限制用户重复点击（倒计时））
     * 服务端（后端）（一、接收手机号、验证参数、二、生成一个随机数4/6位、三、存储到缓存中（redis）四、调用第三方的接口、发送短信内容到手机上）
     * 存储到缓存中、就是为了注册的时候、进行验证
     * 后端、1分钟之内一个手机号发送一次、一天之内发送5次（后端的限制）
     */

    /**
     * 发送验证码
     */
    public function sendCode(Request $request){


        try {
            $phone = $request->post('phone');
            # 验证手机号的参数

            # 发送验证码
            $result = send_message($phone);
            $statusStr = array(
                "0" => "短信发送成功",
                "-1" => "参数不全",
                "-2" => "服务器空间不支持,请确认支持curl或者fsocket，联系您的空间商解决或者更换空间！",
                "30" => "密码错误",
                "40" => "账号不存在",
                "41" => "余额不足",
                "42" => "帐户已过期",
                "43" => "IP地址限制",
                "50" => "内容含有敏感词"
            );
            if ($result != '0') {
                abort(2001,$statusStr[$result]);
            }
            return json(['code' => 200,'msg' => 'ok','data' => []]);
        }catch (HttpException $httpException) {
            return json(['code' => $httpException->getStatusCode(),'msg' => $httpException->getMessage()]);
        }



    }

    /**
     * 手机号注册
     */
    public function doRegister(Request $request){
        try{

            $param = $request->all();
            # 验证参数

            # 验证验证码
            UserBusiness::checkCode($param['phone'],$param['code']);
            # 添加入库 调用业务逻辑类、进行入库
            UserBusiness::register($param);

            return redirect('/login');
        }catch (HttpException $httpException) {
            dd($httpException->getMessage());
        }

    }

    /**
     * 登录可以使用邮箱、手机号、帐号
     */
    public function doLogin(Request $request){
        try{

            $param = $request->all();
            # 验证参数
//            帐号、密码必填

            # 登录 调用业务逻辑类、进行登录
            UserBusiness::doLogin($param);

            # 不能直接跳转到首页
            if (cookie('redirect_url')) {
                return redirect(cookie('redirect_url'));
            } else {
                return redirect('/');
            }

        }catch (HttpException $httpException) {
            dd($httpException->getMessage());
        }
    }

    /**
     * qq回调地址
     */
    public function qq(){
        # 根据回调的参数、获取帐号信息
        require_once("./plugins/qq/API/qqConnectAPI.php");

        $qc = new \QC();

        $token=  $qc->qq_callback();
        $openid =  $qc->get_openid();//openid 需要入库QQ分配给每个用户的唯一标识
        $qc = new \QC($token,$openid);
        # 根据token和openid获取用户信息
        $user_info = $qc->get_user_info();
        $user_info['open_id'] = $openid;
        # 创建用户入库、入库之前需要判断是否已经授权过
        UserBusiness::register($user_info,2);
        return redirect('/');//跳转到首页
    }

    /**
     * 嵌套到项目里两种方法
     * 第一种 直接访问示例的index.php
     * 第二种 根据示例、自己写方法
     */
    public function thirdLogin(){
        require_once("./plugins/qq/API/qqConnectAPI.php");
        $qc = new \QC();
        $qc->qq_login();
    }


    /**
     * 退出的接口
     */
    public function logout(){
        Session::delete('userInfo');
//        Session::clear();

        return redirect('/login');
    }

}
